/*****************************************************************************************
 * ETS
 * 
 * Cours:		LOG121
 * Session:		A2013
 * Groupe:		04
 * Projet:		Laboratoire #4
 * Etudiants:	Frederic-Simon Mimeault
 * 				Francisco Felipe Quilodran
 * 				Guillaume Longtin
 * 				William Proulx
 * 
 * Professeur:	Francis Cardinal
 * 
 * Fichier:		FenetrePrincipaleVue.java
 * 
 * Date de creation:	2013-11-23
 * Date dern. modif.:	2013-12-06
 * ****************************************************************************************
 * Historique des modifications
 * ****************************************************************************************
 * 2013-11-23 Version initiale
 *****************************************************************************************/

package application;

import java.awt.image.BufferedImage;
import java.io.IOException;

import controleur.FigureControleur;
import controleur.PerspectiveControleur;
import modele.Figure;
import modele.Perspective;
import vue.FigureVue;
import vue.VignetteVue;

/**
 * Cette classe est celle qui permet de faire rouler l'application.
 * Elle est le conteneur (frame) principale du logiciel qui permettra
 * de jouer avec l'image chargée et de naviguer dans le menu.
 * @author Guillaume Longtin
 */
public class FenetrePrincipaleVue {
	
	static final int NOMBRE_PERSPECTIVES = 2;
	static final int FENETRE_LARGEUR = 500;
	static final int FENETRE_HAUTEUR = 500;
	static FigureControleur fControleur = new FigureControleur();
	static PerspectiveControleur pControleur = new PerspectiveControleur();
	static Serialize serialisation = new Serialize();
	static Perspective tableauPerspectives[] = new Perspective[NOMBRE_PERSPECTIVES];
	static FigureVue tableauFigureVue[] = new FigureVue[NOMBRE_PERSPECTIVES];
	static VignetteVue vignette;
	//Fermer chaque fenetre selon un strategie, etant la premiere la fenetre maitre et les autres les secondaires.
	static StrategieFermerFenetre[] tabStrategieBtnFermer=new StrategieFermerFenetre[NOMBRE_PERSPECTIVES+1];

	/**
	 * Cette méthode est celle qui permet de faire rouler l'application.
	 * @param args
	 * @throws IOException
	 */
	public static void main(String[] args) throws IOException {
		
		initialisation(NOMBRE_PERSPECTIVES, "pussy.jpg");
		
	}
	
	/**
	 * Methode qui permet d'initialiser une nouvelle image avec des JFrame perspectives associées
	 * @param NOMBRE_PERSPECTIVES
	 * @param imgPath Chemin vers l'image sur le disque dur
	 */
	public static void initialisation(int NOMBRE_PERSPECTIVES, String imgPath) {
		
		try {
			
			for(int i = 0; i < tableauFigureVue.length; i++) {
				
				if(tableauFigureVue[i] != null) {
					
					tableauFigureVue[i].dispose();
					
				}
				
			}
			
			if(vignette != null) {
				
			  vignette.dispose();
			  
			}
			
			Figure tmpFigure = new Figure(imgPath); 
			fControleur.initialiserFigure(tmpFigure);
			BufferedImage tmpImg = fControleur.obtenirFigure().getImg();
			vignette = new VignetteVue(tmpFigure);
			
			for(int i = 0; i < NOMBRE_PERSPECTIVES; i++) {
				
				tableauPerspectives[i] = new Perspective(100, 0, 0, tmpImg.getWidth() - FENETRE_LARGEUR, tmpImg.getHeight() - FENETRE_HAUTEUR);
			
			}
			
			serialisation.configureSerializer(fControleur.obtenirFigure(), tableauPerspectives);
			
			Menu jMenuBar = new Menu(fControleur,pControleur,serialisation);
			
			//Cette la fenetre maitre en premier et les autres apres
			tableauFigureVue[0] = new FigureVue(fControleur.obtenirFigure(), tableauPerspectives[0], jMenuBar, new FermerSuperFenetre());
			
			//Les fenetre Secondaires ne possedent pas de jmenubar et elle se fermer sans arreter l'application
			for(int i = 1; i < tableauPerspectives.length; i++) {
				
				tableauFigureVue[i] = new FigureVue(fControleur.obtenirFigure(), tableauPerspectives[i], null, new FermerFenetreSecondaire());
			
			}
			
		} catch (IOException e) {
			
			e.printStackTrace();
			
		}
	}
}
